/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controladores;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.util.*;
import Beans.Cliente;
import Beans.Proveedor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


/**
 *Esta clase sirve como controlador de la clase Proveedor y aqui
 * se registra, modifica, consulta y elimina
 * @author Ingenieros de sistemas III semestre
 */

public class Mcliente {

    private List<Cliente> listacliente = new LinkedList<Cliente>(); //creacion de la lista
     File archivo=new File("Clientes.dat");
     Cliente cl = new Cliente(); //creacion de una instancia de cliente
    public void grabar() throws IOException {

      FileOutputStream   flujoSalida  = new FileOutputStream(archivo);
      ObjectOutputStream objetoSalida = new ObjectOutputStream(flujoSalida);
      objetoSalida.writeObject(this.getListacliente());
      objetoSalida.close();
     }

    public void restaurar() throws IOException,ClassNotFoundException {
        if(archivo.exists()==true){
            FileInputStream flujoEntrada    = new FileInputStream(archivo);
  	    ObjectInputStream objetoEntrada = new ObjectInputStream(flujoEntrada);
  	    List<Cliente> lcl = (List) objetoEntrada.readObject();
            this.setListacliente(lcl);
            objetoEntrada.close();
        }
 	
    }

    public List<Cliente> getListacliente() {
        return listacliente;
    }

    public void setListacliente(List<Cliente> listacliente) {
        this.listacliente = listacliente;
    }
  
  

  //Metodos (cruds)

    public boolean Existe(String ced){
        boolean con=false;
        Iterator itc=listacliente.iterator();
           while(itc.hasNext()){
              cl=(Cliente)itc.next();
              if(cl.getCedula().equals(ced)){
                    con=true;
                }
            }
           return con;
        } //verificacion de la existencia

    public void Registrar(Cliente cl){
        if(!Existe(cl.getCedula())){
            cl.setCodigo(getListacliente().size()+"");
            listacliente.add(cl);
            JOptionPane.showMessageDialog(null,"EL cliente se ha registrado correctamente");
            try {
                this.grabar();
            } catch (IOException ex) {
                Logger.getLogger(Mcliente.class.getName()).log(Level.SEVERE, null, ex);
            }
        }else{
            JOptionPane.showMessageDialog(null, "ESTE CLIENTE YA SE ENCUENTRA REGISTRADO","INFORMACION",JOptionPane.ERROR_MESSAGE);
        }
    } // registrar cliente

     public int GenerarCodigo(){
        int codigo= 0;
        int limite = 10000;
        Random r = new Random();
        codigo = r.nextInt(limite+1);
       return codigo;

    }

    public Cliente Consultar(String ced){
        Iterator itc=listacliente.iterator();
         while(itc.hasNext()){
            Cliente cli= (Cliente)itc.next();
            if(cli.getCedula().equals(ced)){
               return cli;
            }
         }
         return new Cliente();
    } //Consultar cliente


      public int Posicion(String ced){
          Iterator itc=getListacliente().iterator();
          int pos=-1;
          int ind=-1;
         while(itc.hasNext()){
             cl = (Cliente)itc.next();
            if(cl.getCedula().equals(ced)){
                ind=ind+1;
                 pos=ind;
            }else{
                ind=ind+1;
            }
         }
          return pos;
    }



    public Cliente ConsultarString(String nombre){
         Iterator ita = getListacliente().iterator();
            while(ita.hasNext()){
               cl = (Cliente)ita.next();
               if(cl.getNombre().equals(nombre)){
                   return cl;
               }
        }
        return new Cliente();
    }
    
   public void Eliminar(String identificacion){
       try{
            Iterator itc=listacliente.iterator();
            while(itc.hasNext()){
            cl=(Cliente)itc.next();
            if(cl.getCedula().equals(identificacion)){
               getListacliente().remove(cl);
                    try {
                        this.grabar();
                    } catch (IOException ex) {
                        Logger.getLogger(Mcliente.class.getName()).log(Level.SEVERE, null, ex);
                    }
               JOptionPane.showMessageDialog(null,"Eliminado");
            }
        }
       }catch(ConcurrentModificationException e){

       }
      
    } //Eliminar un cliente


      public void Modificar(String nit,Cliente client){
        int posicion = this.Posicion(nit);
         getListacliente().set(posicion, client);
         JOptionPane.showMessageDialog(null,"Los datos se guardaron "
                                                 + "Satisfactoriamente");
        try {
            this.grabar();
        } catch (IOException ex) {
            Logger.getLogger(Mcliente.class.getName()).log(Level.SEVERE, null, ex);
        }
       }
     //Modificar un cliente

    
     public Cliente Recorrer(){
         Iterator it = listacliente.iterator();
         while(it.hasNext()){
             Cliente cli = (Cliente)it.next();
             return cli;
         }
         return new Cliente();
     }



}
